//
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.laporanrekapitulasanggaranrabunit;

import java.util.Map;
import org.sadhar.sia.common.ClassSession;
import org.sadhar.sia.framework.ClassApplicationModule;
import org.zkoss.zk.ui.Session;
import org.zkoss.zk.ui.Sessions;
import org.zkoss.zul.Filedownload;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listhead;
import org.zkoss.zul.Listheader;
import org.zkoss.zul.Listitem;

/**
 * Digunakan untuk menangani komponen laporanrekapitulasianggaranRABunit.LaporanRekapitulasAnggaranRABUnit.zul
 * @author kris
 */
public class LaporanRekapitulasiAnggaranRABUnitWnd extends ClassApplicationModule {

    private Label lblTahunAnggaran, lblTotalAnggaran;
    private Listbox lstboxReport;
    private ClassSession session;
    private LaporanRekapitulasiAnggaranRABUnitDAO rekapitulasiAnggaranRABUnitDAO;
    private Session sesi;
    public LaporanRekapitulasiAnggaranRABUnitWnd() {
        sesi = Sessions.getCurrent();
        session = (ClassSession) sesi.getAttribute("CURRENT_SESSION");
        rekapitulasiAnggaranRABUnitDAO = new LaporanRekapitulasiAnggaranRABUnitDAOImpl();
    }

    public void onCreate() throws Exception {
        lblTahunAnggaran = (Label) getFellow("lblTahunAnggaran");
        lblTotalAnggaran = (Label) getFellow("lblTotalAnggaran");
        lstboxReport = (Listbox) getFellow("lstboxReport");
        
        lblTahunAnggaran.setValue(session.getThnAnggaran());
        createReport();
    }

    /**
     * Digunakan untuk untuk membuat report
     * @throws Exception
     */
    public void createReport() throws Exception {
        String tahunKelompok = rekapitulasiAnggaranRABUnitDAO.getTahunKelompokAnggaranYangDigunakan(session.getThnAnggaran());
        Listhead listhead = lstboxReport.getListhead();
        Listheader listheader = new Listheader("No");
        listheader.setWidth("5%");
        listhead.appendChild(listheader);


        rekapitulasiAnggaranRABUnitDAO.createTabelTemp();
        for (Map map : rekapitulasiAnggaranRABUnitDAO.getResultForReport(tahunKelompok, session.getThnAnggaran())) {
            //  Listitem item = new Listitem();
            //  item.setValue(map);
            //  item.appendChild(new Listcell(map.get("Nama_unit_kerja").toString()));


            /*   Listheader listheader = new Listheader(map.get("namaPosBiaya").toString(), "", "100px");
            listhead.appendChild(listheader);


            for (Map m : rekapitulasiAnggaranRABUnitDAO.getResultForReport(tahunKelompok, session.getThnAnggaran())) {
            if (m.get("namaPosBiaya").equals(map.get("namaPosBiaya")) && m.get("Nama_unit_kerja").equals(map.get("Nama_unit_kerja"))) {
            item.appendChild(new Listcell(map.get("hasil").toString()));
            } else {
            item.appendChild(new Listcell("-"));
            }
            }
             */


            if (rekapitulasiAnggaranRABUnitDAO.getBarisUnitKerja(map.get("Nama_unit_kerja").toString()).equals("0")) {
                rekapitulasiAnggaranRABUnitDAO.isiUnit(map.get("Nama_unit_kerja").toString());
            }

            if (rekapitulasiAnggaranRABUnitDAO.getKolomPosBiaya(map.get("kodePosBiaya").toString().trim()).equals("-")) {
                rekapitulasiAnggaranRABUnitDAO.tambahKolom(map.get("kodePosBiaya").toString(), map.get("namaPosBiaya").toString());
            }
            rekapitulasiAnggaranRABUnitDAO.isiKolom(rekapitulasiAnggaranRABUnitDAO.getBarisUnitKerja(map.get("Nama_unit_kerja").toString()), map.get("kodePosBiaya").toString(), map.get("hasil").toString());
            // lstboxReport.appendChild(item);
        }

        // header cell
        int index = 0; // index untuk mengatur posisi kolom
        int width = 75; // lebar header sisa dari header 1 dan 2
        for (Map map : rekapitulasiAnggaranRABUnitDAO.getHeader()) {
            for (Map map2 : rekapitulasiAnggaranRABUnitDAO.getFields2()) {
                String namaKolom = map2.get("Field").toString();
                listheader = new Listheader(map.get(namaKolom).toString());
                if (index > 0) {
                    double lengthHeader = width / (rekapitulasiAnggaranRABUnitDAO.getFields2().size() - 1);
                    listheader.setAlign("right");
                    listheader.setWidth(lengthHeader + "%");
                } else {
                    listheader.setWidth("20%");
                }
                listhead.appendChild(listheader);
                index++;
            }
        }

        // item cell
        for (Map map : rekapitulasiAnggaranRABUnitDAO.getDataReport()) {
            Listitem item = new Listitem();
            item.setValue(map);
            item.appendChild(new Listcell(map.get("id").toString()));

            for (Map map2 : rekapitulasiAnggaranRABUnitDAO.getFields2()) {
                String namaKolom = map2.get("Field").toString();
                item.appendChild(new Listcell(map.get(namaKolom).toString()));
            }
            lstboxReport.appendChild(item);
        }

        // sum cell
        Listitem sum = new Listitem();
        sum.setHeight("40px");
        sum.appendChild(new Listcell(""));
        sum.setStyle("color:grey;");

        index = 0;
        double totalAnggaran = 0;
        for (Map map2 : rekapitulasiAnggaranRABUnitDAO.getFields2()) {
            String namaKolom = map2.get("Field").toString();
            if (index <= 0) {
                sum.appendChild(new Listcell("Total  :"));
            } else {
                double total = Double.valueOf(rekapitulasiAnggaranRABUnitDAO.getSum(namaKolom.toString()));
                totalAnggaran = totalAnggaran + total;
                sum.appendChild(new Listcell(String.valueOf(total)));
            }
            index++;
        }
        lstboxReport.appendChild(sum);

        rekapitulasiAnggaranRABUnitDAO.dropTabelTemp();

        // tampilkan total anggaran
        lblTotalAnggaran.setVisible(true);
        lblTotalAnggaran.setValue("Total Anggaran : " + totalAnggaran);
    }

    public void export_to_csv(Listbox listbox) {
        String s = ";";
        StringBuffer sb = new StringBuffer();

        for (Object head : listbox.getHeads()) {
            String h = "";
            for (Object header : ((Listhead) head).getChildren()) {
                h += ((Listheader) header).getLabel() + s;
            }
            sb.append(h + "\n");
        }
        for (Object item : listbox.getItems()) {
            String i = "";
            for (Object cell : ((Listitem) item).getChildren()) {
                i += ((Listcell) cell).getLabel() + s;
            }
            sb.append(i + "\n");
        }
        Filedownload.save(sb.toString().getBytes(), "text/plain", "hasilRekapAnggaran.csv");
    }

    public void btnExportOnClick() {
        export_to_csv(lstboxReport);
    }
}
